CITS3403/CITS5504 - Agile Web Development - Final Project
Semester 1, 2020
| Johnny Barrett | Ivy Bui | Jesse Carter | Cesar Gonzalez |
|---|---|---|---|
One of the biggest challenges faced by Computer Science, Data Science and Software Engineering students is the inability to demostrate our true coding ability during tests and exams, as we exhaustedly try to make sure the indentation on our hand-written linked list class defintion is correct. Instead of plain old pen and paper, why not allow students to be assessed on a more realistic platform, removing the hassle of the scribble, and providing some of the staple creature comforts like syntax highlighting? (and yes, we remembered to turn AutoComplete off)!
For this reason we decided to develop Unicode, so that students and professors alike can enjoy the experience of learning and teaching how to code just a little bit more!
Unicode is an online test/exam platform for educational institutions that allows administrator users (teachers) to create and evaluate coding related tests, and for users/students to sit these tests and see results. It is designed to provide a friendly experience for studens and teachers without compromising the level of complexity required for developing the coding learning experience.
Unicode provides the ability to not only test students’ theorical knowledge of but also their technical abilities. Teachers have the ability to select from three different questions assesment types:
Another important functionality of Unicode is the ability of the teacher to organise all of their tests and students into their respective courses, choosing which tests to display to students and when.
Unicode is built using the MVC (model view controller) architecture. The model refers to an object referencing an entity in a database, the view is how that object is presented to the user, and the controller is a linking class that builds the model from the database, prepares the view based on the model, displays it to the user, and takes user input and adjusts the model and database accordingly.
The user stories developed were:
| # | User | User Story | Story Point |
|---|---|---|---|
| 1 | Admin |
I want to be able to create coding tests | 1 |
| 2 | Admin |
I want to be able to group my tests into courses | 1 |
| 3 | Admin |
I want to be able to edit, delete, rename and make live tests | 2 |
| 4 | Admin |
I want to be able to control student access to the tests | 3 |
| 5 | Admin |
I want to have a mix of questions available to me | 1 |
| 6 | Admin |
I want to have an in-built code editor | 1 |
| 7 | Admin |
I want to active and deactive tests | 10 |
| 8 | Admin |
I want to be able to manually mark tests | 4 |
| 9 | Admin |
I want to see my student’s results of my tests/courses | 5 |
| 10 | Admin |
I want to be able to display the solutions to my students after the test | 6 |
| 11 | Admin |
I want to be able to allocate marks to each question | 3 |
| 12 | Student |
I want to be able to take the test assigned to me | 7 |
| 13 | Student |
I want to be able to see my marks, and how they compare to the rest of the class | 8 |
| 14 | Student |
I want to see the solutions the tests (after) | 9 |
And so the corresponding views were: | User | View | | :—: | :— | | All | Login | | All | Registration | | Admin | Course View | | Admin | Create a new course prompt | | Admin | Single course view (contains each test) | | Admin | Create new test prompt | | Admin | Test result dashboard | | Admin | New test,add questions (3 types options, Description answers and allocated marks | | Admin | Test preview (what it looks to students) | | Student | Single course view (contain each available test) | | Student | Taking test view | | Student | Test result view |
Instructions for installation in localhost (click me to expand)
$ cd agile-proj2
$ python -m venv venv
# To activate:
$ source venv/bin/activate
or
$ python3 -m venv venv
# To activate:
$ source venv/bin/activate
$ pip install -r requirements.txt
$ cd app-dev
$ flask run
Note: for whatever reason, the required package python-dotenv can play up straight after installation. If you receive an ImportError from this package after running flask run, do the following:
$ cd ..
$ deactivate
$ source venv/bin/activate
$ cd app-dev
$ flask run
This should resolve the issue!
Instructions for admin, click me to expand
Click Login
CREATE A NEW COURSE or “+” icon next to CourseCreate CourseNew TestCreate TestEdit TestDescription fieldSolution (for “Output” and “MCQ” questions)Allocated mark for the questionSave (or Clear to restart the question)Return ->Live toggle button (which will by default show Not Live)Manage studentsManage studentsMark Test button, click this to mark the testSubmit and give feedback -> to submit the result and optionally provide the student some feedbackInstructions for students, click me to expand
Sign upClick Register
LoginSubmit test and confirm⚠️ Firstly, ensure you are in the app-dev folder:
$ cd app-dev
Tests:
- Password hashing: test_set_pw and test_set_pw2 - Main page login: test_main_page - Registration module test_users_can_register - Test that only registered users can login test_users_cannot_unless_registered - Test that there are not duplicate registration test_duplicate_user_registration_throws_error
To run these tests, simply run:
$ python -m Tests.unittest
in your terminal.
⚠️ Please make sure to run system test last.
To run the systemtests, in __init__.py, manually change the Config object to TestConfing. This line has been commented for you. This prevents the test from overwriting the existing database.
python -m Tests.system
We believe that UniCode has immense potential to keep growing to become an even more robust educational tool for students and teachers. As all developers know, development never ends, and as such here’s a list of where we’re at and what the next steps might be:
UniCode: Because nobody likes writing code with a pen and pad